/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.di0.sql.insert;

import br.di0.sql.ConexaoPostgres;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

/**
 *
 * @author di0
 */
public class InsertMovimento {

    public InsertMovimento(int tipoMovto) {
        this.tipoMovto = tipoMovto;
        if (tipoMovto == COMPRA) {
            movto = strCompra;
        } else {
            movto = strVenda;
        }
    }

    /**
     *
     * @param movimento cod_cliente ou cod_fornecedor
     * @return status da query
     */
    public int inserir(String movimento) {
        int rs = 0;
        String user = "1";

        //id_compra/venda, id_fornecedor/cliente, dat_inc, id_usuario
        String query = "INSERT INTO " + movto + "s VALUES (DEFAULT," + movimento + ", (SELECT current_timestamp)," + user + ")";
        System.out.println(query);
        ConexaoPostgres postgres = new ConexaoPostgres();
        try {
            Connection conexao = postgres.setConexao();
            Statement stm = conexao.createStatement();
            int id = 1;
            rs = stm.executeUpdate(query, id);
            System.out.println("Resultado de " + query + ":\n\t" + rs);
            ResultSet result = stm.getGeneratedKeys();
            result.next();
            setLastMovto(result.getString(1));

        } catch (SQLException ex) {
            System.out.println("Erro ao tentar inserir");
            ex.printStackTrace();
        } finally {
            postgres.finalizaConexao();
        }
        return rs;
    }

    /**
     * Inserir produtos da operação na tabela.
     * @param Array com dados do item:
     * Posição 0: cod_operacao
     * Posição 1: código produto
     * Posição 2: quantidade
     * Posição 3: preço unitário
     * Posição 4: preço total
     * @return o resultado da operação
     */
    public int inserirItens(String item[]) {
        int rs = 0;
        //TODO implementar inserção de item_compra/venda
        //id_compra/venda, id_produto, quantidade, preço unitario, preço total
        String query = "INSERT INTO item_" + movto + " VALUES (" + item[0] + "," + item[1] + "," + item[2] + "," + item[3] + "," + item[4] + ")";
        System.out.println(query);
        ConexaoPostgres postgres = new ConexaoPostgres();
        try {
            Connection conexao = postgres.setConexao();
            Statement stm = conexao.createStatement();

            rs = stm.executeUpdate(query);
            System.out.println("Resultado de " + query + ":\n\t" + rs);
            if (rs == 1) {
                int saldoProduto = InsertEstoque.getEstoqueProduto(item[1]);
                if (tipoMovto == COMPRA) { //inserir no estoque
                    saldoProduto = saldoProduto + Integer.parseInt(item[2]);

                } else { //venda remover do estoque
                    saldoProduto = saldoProduto - Integer.parseInt(item[2]);
                }
                String[] produto = new String[2];
                produto[0] = item[1];
                produto[1] = Integer.toString(saldoProduto);
                rs = InsertEstoque.atualizar(produto);
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao tentar inserir item");
            ex.printStackTrace();
        } finally {
            postgres.finalizaConexao();
        }
        return rs;
    }

    private void setLastMovto(String lastMovto) {
        this.lastMovto = lastMovto;
    }

    public String getLastMovto() {
        return lastMovto;
    }
    private String lastMovto = null;
    private int tipoMovto = 0;
    private String movto = null;
    private String strCompra = "Compra";
    private String strVenda = "Venda";
    public static final int VENDA = 1;
    public static final int COMPRA = 2;
}
